home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ für Kids
/
C++ for kids.iso
/
Buch
/
hangy.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1999-02-01
|
8KB
|
265 lines
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "hangy.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
const String Pfad = "c:\\cpp\\buch\\";
class THangMan : public TObject
{
private:
int OK;
int Nr;
int Laenge;
int Max;
bool Fertig;
bool Mimik;
String RateText;
String Geraten;
TStringList *Liste;
void __fastcall SetZero(void);
public:
virtual void __fastcall ClearHangMan(void);
virtual void __fastcall DrawHangMan(void);
virtual void __fastcall ShowHangMan(void);
virtual void __fastcall GetKey (char Key);
virtual void __fastcall GetList (String Datei);
__fastcall THangMan(String Datei);
virtual __fastcall ~THangMan(void);
};
THangMan *HangMan;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall THangMan::THangMan (String Datei)
{
Liste = new TStringList;
SetZero ();
Mimik = true;
try
{
Liste->LoadFromFile (Datei);
Max = Liste->Count;
}
catch (...)
{
Form1->Panel1->Caption = "Ohne Worte!";
Max = 0;
}
}
//---------------------------------------------------------------------------
__fastcall THangMan::~THangMan(void)
{
Liste->Clear ();
delete Liste;
}
//---------------------------------------------------------------------------
void __fastcall THangMan::SetZero (void)
{
Geraten = "";
Nr = 0;
OK = 0;
Fertig = false;
Form1->Image1->Canvas->Brush->Color = clGray;
Form1->Image1->Canvas->Rectangle(0,0,140,200);
}
//---------------------------------------------------------------------------
void __fastcall THangMan::ClearHangMan (void)
{
SetZero ();
if (Max > 0) RateText = UpperCase(Liste->Strings[random(Max)]);
else RateText = UpperCase("Zehplusplus");
Laenge = RateText.Length();
for (int i=0; i<Laenge; i++)
{
Geraten = Geraten + "?";
}
Form1->Panel1->Caption = Geraten;
Form1->Label1->Caption = "Buchstaben eintippen!";
}
//---------------------------------------------------------------------------
void __fastcall THangMan::ShowHangMan (void)
{
int Mix = 10;
if (Mimik) Mix = 11;
Nr = 0;
while (Nr < Mix) {Nr++; DrawHangMan ();}
Form1->Panel1->Caption = RateText;
if (RateText.IsEmpty())
Form1->Label1->Caption = "Da ist kein Wort";
else
Form1->Label1->Caption = "ist das Wort";
Mimik = !Mimik;
}
//---------------------------------------------------------------------------
void __fastcall THangMan::DrawHangMan (void)
{
Form1->Image1->Canvas->Pen->Width = 3;
Form1->Image1->Canvas->Brush->Color = clSilver;
switch (Nr)
{
case 1:
Form1->Image1->Canvas->MoveTo (30,10);
Form1->Image1->Canvas->LineTo (30,200);
break;
case 2:
Form1->Image1->Canvas->MoveTo (30,10);
Form1->Image1->Canvas->LineTo (95,10);
break;
case 3:
Form1->Image1->Canvas->MoveTo (95,10);
Form1->Image1->Canvas->LineTo (95,30);
break;
case 4:
Form1->Image1->Canvas->Brush->Color = clRed;
Form1->Image1->Canvas->Ellipse (80,30,110,65);
break;
case 5:
Form1->Image1->Canvas->Ellipse (80,65,110,130);
break;
case 6:
Form1->Image1->Canvas->MoveTo (90,130);
Form1->Image1->Canvas->LineTo (90,170);
break;
case 7:
Form1->Image1->Canvas->MoveTo (100,130);
Form1->Image1->Canvas->LineTo (100,170);
break;
case 8:
Form1->Image1->Canvas->Ellipse (75,165,95,175);
break;
case 9:
Form1->Image1->Canvas->Ellipse (95,165,115,175);
break;
case 10:
Form1->Image1->Canvas->Brush->Color = clAqua;
Form1->Image1->Canvas->Ellipse (80,30,110,65);
Form1->Image1->Canvas->Brush->Color = clYellow;
Form1->Image1->Canvas->Ellipse (86,38,95,48);
Form1->Image1->Canvas->Ellipse (95,38,104,48);
Form1->Image1->Canvas->Arc (86,54,104,60,104,57,86,57);
break;
case 11:
Form1->Image1->Canvas->Brush->Color = clFuchsia;
Form1->Image1->Canvas->Ellipse (80,30,110,65);
Form1->Image1->Canvas->Brush->Color = clLime;
Form1->Image1->Canvas->Ellipse (86,38,95,48);
Form1->Image1->Canvas->Ellipse (95,38,104,48);
Form1->Image1->Canvas->Arc (86,45,104,60,86,53,104,53);
}
}
//---------------------------------------------------------------------------
void __fastcall THangMan::GetKey (char Key)
{
String Taste = UpperCase(Key);
bool Enthalten = false;
if (!Fertig)
{
// Jeden Buchstaben einzeln ⁿberprⁿfen
for (int i=1; i<=Laenge; i++)
{
if (Taste == RateText.SubString(i,1))
{
if (Taste != Geraten.SubString(i,1))
{
OK++;
Geraten[i] = Key;
Geraten = UpperCase(Geraten);
}
Enthalten = true;
}
}
// Wenn Key enthalten, anzeigen
if (Enthalten)
Form1->Panel1->Caption = Geraten;
// sonst Hangman weiterzeichnen
else
{
Nr++;
if (Nr < 11) DrawHangMan ();
}
// Wenn alle Buchstaben geraten, OK
if ((OK >= Laenge) && (Nr < 10))
{
if (RateText.IsEmpty())
Form1->Label1->Caption = "Klick auf NEU!";
else
Form1->Label1->Caption = "OK";
SetZero ();
Fertig = true;
Form1->Image1->Picture->LoadFromFile ("HangMan.bmp");
}
// Wenn Hangman vollstΣndig, TOT
else if ((Nr >= 10) && (!Fertig))
{
Form1->Panel1->Caption = RateText;
Form1->Label1->Caption = "TOT";
}
}
}
//---------------------------------------------------------------------------
void __fastcall THangMan::GetList (String Datei)
{
SetZero ();
try
{
Liste->LoadFromFile (Datei);
Max = Liste->Count;
}
catch (...)
{
Form1->Panel1->Caption = "Ohne Worte!";
Max = 0;
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize ();
HangMan = new THangMan (Pfad+"HangMan.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete HangMan;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewButtonClick(TObject *Sender)
{
HangMan->ClearHangMan ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadyButtonClick(TObject *Sender)
{
Form1->Image1->Canvas->Brush->Color = clGray;
Form1->Image1->Canvas->Rectangle(0,0,140,200);
HangMan->ShowHangMan ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
HangMan->GetKey (Key);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Oeffnen1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
HangMan->GetList (OpenDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Ende1Click(TObject *Sender)
{
Close ();
}
//---------------------------------------------------------------------------